﻿using System;
using System.Collections.Generic;
using Iacym.Entities;

namespace Iacym.Repository
{
    public interface IOfrendaRepository
    {
        List<OFRENDA> GetAllFromOfrendas();
        OFRENDA GetOfrendaById(Int32 id);
        
        List<OFRENDA> GetFromOfrendasByPersona(string criterio);
        
        //Ofrendas por tipo ofrenda y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoOfrendaPersona(Int32 tipoOfrenda, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaPersonaFechaEspec(Int32 tipoOfrenda, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaPersonaRangoFechas(Int32 tipoOfrenda, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo ofrenda, tipo moneda y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersona(Int32 TO, Int32 TM, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaFechaEspec(Int32 TO, Int32 TM, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaRangoFechas(Int32 TO, Int32 TM, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo ofrenda, tipo pago y fechas + persona
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersona(Int32 TO, Int32 TP, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersonaFechaEspec(Int32 TO, Int32 TP, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersonaRangoFechas(Int32 TO, Int32 TP, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo ofrenda, tipo pago, tipo monenda y fechas + persona
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersona(Int32 TO, Int32 TP, Int32 TM, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(Int32 TO, Int32 TP, Int32 TM, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(Int32 TO, Int32 TP, Int32 TM, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo moneda y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoMonedaPersona(Int32 tipoMoneda, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoMonedaPersonaFechaEspec(Int32 tipoMoneda, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoMonedaPersonaRangoFechas(Int32 tipoMoneda, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo pago y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoPagoPersona(Int32 tipoPago, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoPagoPersonaFechaEspec(Int32 tipoPago, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoPagoPersonaRangoFechas(Int32 tipoPago, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Busqueda de ofrendas solo por fechas
        List<OFRENDA> GetFromOfrendaByPersonaFechaEspec(string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByPersonaRangoFechas(string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo moneda, tipo pago, personas y fechas
        List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersona(Int32 TP, Int32 TM, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersonaFechaEspec(Int32 TP, Int32 TM, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersonaRangoFechas(Int32 TP, Int32 TM, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo de reunion y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoReunionPersona(Int32 tipoReunion, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionPersonaFechaEspec(Int32 tipoReunion, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionPersonaRangoFechas(Int32 tipoReunion, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo de reunion, tipo ofrenda y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersona(Int32 TR, Int32 TO, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersonaFechaEspec(Int32 TR, Int32 TO, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersonaRangoFechas(Int32 TR, Int32 TO, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo de reunion, tipo pago y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersona(Int32 TR, Int32 TP, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersonaFechaEspec(Int32 TR, Int32 TP, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersonaRangoFechas(Int32 TR, Int32 TP, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo de reunion, tipo moneda y fechas + Persona
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersona(Int32 TR, Int32 TM, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersonaFechaEspec(Int32 TR, Int32 TM, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersonaRangoFechas(Int32 TR, Int32 TM, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        //Ofrendas por tipo de reunion, tipo ofrenda, tipo pago, tipo moneda y fechas + Personas
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersona(Int32 TR, Int32 TO, Int32 TP, Int32 TM, string criterio, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(Int32 TR, Int32 TO, Int32 TP, Int32 TM, string criterio, DateTime fecha, Int32 opc);
        List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(Int32 TR, Int32 TO, Int32 TP, Int32 TM, string criterio, DateTime fechaIni, DateTime fechaFin, Int32 opc);

        void AddOfrenda(OFRENDA ofrenda);
        void UpdateOfrenda(OFRENDA ofrenda);

        //Montos

        //float MontoSoles();
        //float MontoDolares();
    }
}
